package app

import (
	"chazhou/app/user/srv/common"
	user "chazhou/app/user/srv/internal/handle/v1"
	userpb "chazhou/gen/user/v1"
	"chazhou/pkg/logger"
	"fmt"
	consulApi "github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"log"
	"wmicro/server/grpcserver"
	"wmicro/server/grpcserver/registrycenter"
)

func Run() error {
	fmt.Println(common.Config)
	fmt.Println(common.GetId())
	fmt.Println(common.DB)
	fmt.Println(common.Redsync)
	fmt.Println(common.Rocketmq)
	logger.Debug("chazhou")

	// 创建 consul 服务注册中心
	// 创建 其他注册中心，实现 注册/注销方法 即可
	consulRegisterCenter, err := registrycenter.NewConsulRegisterCenter(
		registrycenter.WithConsulRegisterCenterClientConfig(&consulApi.Config{
			Address: common.Config.Consul.Address,
		}),
	)
	if err != nil {
		log.Printf("服务注册中心创建失败: %s", err.Error())
		return err
	}

	server, err := grpcserver.New(
		// 设置服务名称
		grpcserver.WithServerOptionName(common.Config.App.Name),
		grpcserver.WithServerOptionPost(common.Config.App.Port),
		// 注册本地的grpc服务
		grpcserver.WithServerRegisterServer(func(server *grpc.Server) {
			userpb.RegisterUserServer(server, user.NewUserServer())
		}),
		// 设置服务注册到指定服务注册中心
		grpcserver.WithServerOptionServiceRegisterHost(common.Config.App.Host),
		grpcserver.WithServerOptionServiceRegisterCenter(consulRegisterCenter),
	)

	if err != nil {
		log.Printf("GrpcServe创建失败: %s", err.Error())
		return err
	}

	// 运行
	return server.Run()
}
